package org.zjt.scala.domain

import java.time.format.DateTimeFormatter
import java.time.{LocalDateTime, ZoneId}

/**
  *
  * Description:
  *
  *  =>  闭包 【lambda】
  *      match
  *
  *  =   函数
  *      变量
  *
  * @author juntao.zhang
  *         Date: 2018-06-25 上午11:18
  * @see
  */
class Person(name:String = "", age:Int = 0) {

  private def show() :String ={
    "name:%s\tage:%s".format(this.name,this.age)
  }

  override def toString: String = this.show()


  // 方法引用
  val action = (time: LocalDateTime,action:String) => "time:%s action:%s".format(time.format(format),action)


  // 柯里化方法
  def action2(time: LocalDateTime)(action:String) :Unit = "time:%s action:%s".format(time.format(format),action)



  // 柯里化 add(1)(2) 实际上是依次调用两个普通函数（非柯里化函数），第一次调用使用一个参数 x，返回一个函数类型的值，第二次使用参数y调用这个函数类型的值。
  def add(x:Int)(y:Int)  = x + y


  private val format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")

}

object Person {

  def main(args: Array[String]): Unit = {
    var person = new Person()
    println(person)

    person = new Person("zhangsan",23)
    println(person)
    println(person.action(LocalDateTime.now(),"eating"))

    // 柯里化 1 传入返回一个函数 y => 1+ y,再传入2。
    println(person.add(1)(2))


  }
}